package com.wy2.mapper;

import java.util.List;
import java.util.Optional;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import com.wy2.entity.User;
import com.wy2.util.FenyeUtil;
import com.wy2.util.QuanZhongUtil;

@Repository
public interface UserMapper {

    /**
     * 登录 可根据 用户名 | 手机号 | 邮箱 登录
     * 首先查找用户名 | 手机号 | 邮箱 是否存在
     */
	@Select("select * from user u where u.uname = #{uname}")
    User LoginByObj(String obj);
	/**
	 * 通过uid对用户进行删除
	 * @param uid 前台获取的用户id
	 * @return
	 */
    Integer deleteByPrimaryKey(String uid);
/**
 * 添加一条用户的数据
 * @param record 添加的用户的实体
 * @return
 */
    Integer insert(User record);
/**
 * 通过用户的id查询这条用户的信息
 */
    User selectByPrimaryKey(String uid);
/**
 * 修改用户的信息
 * @param record
 * @return
 */
    Integer updateByPrimaryKeySelective(User record);


    /**
     * 添加或修改时判断是否有重复用户名等信息
     */
    User Unisexist(String username);
    /**
     * 添加或修改时判断是否有重复邮箱等信息
     */
    User Uemailisexist(String uemail);
    /**
     * 添加或修改时判断是否有重复用户名等信息
     */
    User Uidnoisexist(String uidno);
    /**
     * 添加或修改时判断是否有重复手机号等信息
     */
    User Uphoneisexist(String uphone);
    /**
     * 批量删除的方法
     * @param uids 前台获取的id数组
     * @return
     */
    Integer delUsers(@Param("uids") List<String> uids);
    /**
     * @return
     */
    @Update("Update user set daypwdErrorNum = 0;")
    Integer Dailyreset();
    /**
     * 通过用户名修改用户错误的次数和总次数
     * @param upsdwrongtime
     * @param uname
     * @param uleijipwderrornum
     * @return
     */
    @Update("update user set upsdwrongtime = #{upsdwrongtime},uleijipwderrornum = #{uleijipwderrornum} where uname = #{uname};")
    Integer addOne(Integer upsdwrongtime, String uname, Integer uleijipwderrornum);
    /**
     * 通过前台获取的用户id对他进行锁定
     * @param uid
     * @param dayTime
     * @return
     */
    @Update("update user set uislockout = '是', ulocktime = #{dayTime} where uid= #{uid};")
    Integer Lockaccount(String uid, String dayTime);
    /**
     * 通过前台获取的用户id对他的密码错误次数进行归零
     * @param uid
     * @param dayTime
     * @return
     */
     @Update("update user set upsdwrongtime = 0 where uid = #{uid}")
    void ResetDayErrorNum(String uid);

    @Update("update user set ulastlogintime = #{time};")
	Integer dltime(String uid, @Param("time")String time);
    
    /**
     * 获取用户的总条数
     * @param fenye
     * @return
     */
    Integer getCount(FenyeUtil<User> fenye);
/**
 * 分页查询全部的用户
 * @param fenye
 * @return
 */
	List<User> getData(FenyeUtil<User> fenye);
/**
 * 添加用户
 * @param user
 * @return
 */
	Integer addUser(User user);
/**
 * 修改用户
 * @param user
 * @return
 */
	Integer updUser(User user);
/**
 * 删除用户
 * @param uid
 * @return
 */
	Integer delUser(String uid);
/**
 * 通过用户id获取用户数据
 * @param uid
 * @return
 */
	List<User> findByUid(String uid);
/**
 * 通过用户id进行修改密码
 * @param b
 * @param uid
 * @return
 */
	@Update("update user set upassword= #{b} where uid= #{uid}")
	Integer updateNodid(String b, String uid);
/**
 * 通过用户id进行解锁
 * @param uid
 * @return
 */
	int upisLockFalse(String uid);
	/**
	 * 通过用户id进行锁定
	 * @param uid
	 * @return
	 */
	int upisLockTrue(String uid);

	//查询旧密码
    @Select("select * from user where uname = #{uname} and upassword = #{upasswordl}")
	Object selectPwd(String uname, String upasswordl);
// 修改密码
	int updPwd(String uname, String xpassl);
/**
 * 查询电话唯一
 * @param uprotectmetl
 * @return
 */
	User findPhone(String uprotectmetl);
/**
 * 查询身份证唯一
 * @param uidcard
 * @return
 */
	User findIdentity(String uidcard);
/**
 * 找回密码
 * @param xpass2
 * @param uidcard
 */
	void findPassword(String xpass2, String uidcard);
/**
 * 通过身份证查询用户
 * @param uidcard
 * @return
 */
	List<User> UserCard(String uidcard);
	/**
	 * 通过邮箱查询用户
	 * @param uidcard
	 * @return
	 */
	List<User> UserEmail(String uprotectemail);
	/**
	 * 通过电话查询用户
	 * @param uidcard
	 * @return
	 */
	List<User> UserMetl(String uprotectmetl);
/**
 * 通过用户id解锁
 * @param user
 * @return
 */
	@Update("update user set uislockout = #{uislockout} where uid = #{uid}")
	Integer islocl(User user);
/**
 * 通过咨询师id查询用户信息
 * @param zxid
 * @return
 */
	@Select("select * from user  u where u.uid=#{zxid} ")
	User getByUidUname(String zxid);

	/**
	 * 获取条数	
	 * @param fenye
	 * @return
	 */
	Integer getCountByQz(FenyeUtil<QuanZhongUtil> fenye);
/**
 * 分页
 * @param fenye
 * @return
 */
	List<QuanZhongUtil> getDataByQz(FenyeUtil<QuanZhongUtil> fenye);
	/**
	 * 根据times字段查询
	 * @param times
	 * @return
	 */
	List<QuanZhongUtil> findByIntime(String times);
/**
 * 修改
 * @param qz
 * @return
 */
	Integer updQz(QuanZhongUtil qz);

	
}